package br.com.consultsystems.dominio.financeiro;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.xml.bind.annotation.XmlRootElement;

@Entity
@Table(name = "fechamento")
@SequenceGenerator(name = "operacao", sequenceName = "operacao",  allocationSize = 1)
@XmlRootElement
public class Fechamento implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 9050120356068416535L;

	@Id
	@Column(name = "id", nullable = false, insertable = true, updatable = false)
	@GeneratedValue(generator = "operacao", strategy = GenerationType.SEQUENCE)
	private Long id;
	
	@ManyToOne
	@JoinColumn(name = "id_conta", nullable = false, insertable = true, updatable = false)
	private Conta conta;	

	@ManyToOne
	@JoinColumn(name = "id_balancete", nullable = false, insertable = true, updatable = false)
	private Balancete balancete;	
	
	@Column(name = "datafechamento", nullable = false, insertable = true, updatable = false)
	@Temporal(TemporalType.DATE)
	private Date dataFechamento;

	@Column(name = "saldoanterior", nullable = false, insertable = true, updatable = false)
	private BigDecimal saldoAnterior;

	@Column(name = "valorreceber", nullable = false, insertable = true, updatable = false)
	private BigDecimal valorReceber;

	@Column(name = "valorpagar", nullable = false, insertable = true, updatable = false)
	private BigDecimal valorPagar;

	@Column(name = "saldoatual", nullable = false, insertable = true, updatable = false)
	private BigDecimal saldoAtual;

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public Conta getConta() {
		return conta;
	}

	public void setConta(Conta conta) {
		this.conta = conta;
	}

	public Balancete getBalancete() {
		return balancete;
	}

	public void setBalancete(Balancete balancete) {
		this.balancete = balancete;
	}

	public Date getDataFechamento() {
		return dataFechamento;
	}

	public void setDataFechamento(Date dataFechamento) {
		this.dataFechamento = dataFechamento;
	}

	public BigDecimal getSaldoAnterior() {
		return saldoAnterior;
	}

	public void setSaldoAnterior(BigDecimal saldoAnterior) {
		this.saldoAnterior = saldoAnterior;
	}

	public BigDecimal getValorReceber() {
		return valorReceber;
	}

	public void setValorReceber(BigDecimal valorReceber) {
		this.valorReceber = valorReceber;
	}

	public BigDecimal getValorPagar() {
		return valorPagar;
	}

	public void setValorPagar(BigDecimal valorPagar) {
		this.valorPagar = valorPagar;
	}

	public BigDecimal getSaldoAtual() {
		return saldoAtual;
	}

	public void setSaldoAtual(BigDecimal saldoAtual) {
		this.saldoAtual = saldoAtual;
	}

	@Override
	public String toString() {
		return "Fechamento [id=" + id + ", conta=" + conta + ", balancete="
				+ balancete + ", dataFechamento=" + dataFechamento
				+ ", saldoAnterior=" + saldoAnterior + ", valorReceber="
				+ valorReceber + ", valorPagar=" + valorPagar + ", saldoAtual="
				+ saldoAtual + "]";
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Fechamento other = (Fechamento) obj;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		return true;
	}	
	
}
